/**
 * 
 */
package com.rpg.base;

import com.rpg.base.interactive.flyweight.BaseInteractiveObject;

/**
 * @author Donald
 */
public interface Party<T> {
	/**
	 * Adds gold to the party, and handle any visuals to display.
	 * @param value the amount of gold
	 */
	void addGold(long value);
	/** Handles events when the entire party becomes dead or incapacitated. */
	void becomesDead();
	/** Updates the party when the game is reset. */
	void gameReset();
	/**
	 * Gets all party members.
	 * @return {@link T}[]
	 */
	T[] getMembers();
	/**
	 * Adds a new member to the party.
	 * @param pc the new member
	 */
	void addMember(T pc);
	/**
	 * Adds a new member to the party.
	 * @param ioid the new member's interactive object id
	 */
	void addMember(int ioid);
	/** Initializes the party. */
	void initializeParty();
	/**
	 * Determines if the party is in fight mode.
	 * @return true if the party is in fight mode, false otherwise
	 */
	boolean isInFightMode();
	/**
	 * Adds a key to the keyring.
	 * @param key the key
	 */
	void keyringAdd(long key);
	/**
	 * Sends COMBINE event to "io" for each key in the keyring.
	 * @param io the interactive object
	 */
	void keyringCombine(BaseInteractiveObject io);
	/** Initializes the party's keyring. */
	void keyringInit();
	/**
	 * Adds a quest to the quest structures.
	 * @param quest the quest
	 */
	void questAdd(long quest);
	/** Initialize/reset party quest structures. */
	void questInit();
	/** Starts the party on a new quest. */
	void startNewQuest();
}
